home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Surfer: Getting Started
/
Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin
/
pc
/
mac
/
bonus
/
peter_le
/
dehqx-20
/
hqxlists.p
< prev
next >
Wrap
Text File
|
1991-08-23
|
4KB
|
179 lines
unit HQXLists;
{ DeHQX v2.0.0 ⌐ Peter Lewis, Aug 1991 }
interface
uses
MyLists, MyFileSystem;
var
{ Total size in all lists. Set to zero in InitHQXLists. size added in AddFile. }
size_in_lists: longInt;
{ Total size in all processed files. Set to zero in InitHQXLists. You add any processed bytes }
size_processed: longInt;
{ Current name being processed }
processing_name: str63;
procedure InitHQXLists;
procedure AddFile (vrn: integer; dirID: longInt; name: str63; folder: boolean; size: longInt);
function AnyInputFiles: boolean;
procedure StartList;
function AnyFilesLeft: boolean;
procedure GetNextFile (var vrn: integer; var dirID: longInt; var name: str63; var folder: boolean);
procedure FinishFile (del: boolean);
procedure FinishList (del: boolean);
procedure FinishHQXLists;
implementation
type
fileList = record
Fvrn: integer;
FdirID: longInt;
Fsh: stringHandle;
Ffolder: boolean;
Fdel: boolean;
Fsize: longInt;
end;
fileListPtr = ^fileList;
fileListHandle = ^fileListptr;
var
inlist, outlist: listHead;
outptr: listItem;
outflh: fileListHandle;
procedure InitHQXLists;
begin
CreateList(inlist);
CreateList(outlist);
size_in_lists := 0;
size_processed := 0;
processing_name := '';
end;
procedure DeleteList (var lh: listHead; del: boolean);
var
flh: fileListHandle;
ooe: OSErr;
begin
while not IsEmpty(lh) do begin
DeleteHead(lh, flh);
if del and flh^^.Fdel then
ooe := MFSDelete(flh^^.Fvrn, flh^^.FdirID, flh^^.Fsh^^);
DisposHandle(handle(flh^^.Fsh));
DisposHandle(handle(flh));
end;
end;
procedure FinishHQXLists;
begin
DeleteList(inlist, false);
DestroyList(inlist, false);
DeleteList(outlist, false);
DestroyList(outlist, false);
end;
procedure StartList;
var
flh: fileListHandle;
begin
while not IsEmpty(inlist) do begin
DeleteHead(inlist, flh);
AddTail(outlist, flh);
end;
ReturnHead(outlist, outptr);
end;
procedure FinishList (del: boolean);
begin
DeleteList(outlist, del);
end;
function GetFileLength (vrn: integer; dirID: longInt; name: str63): longInt;
var
pb: HParamBlockRec;
oe: OSErr;
begin
with pb do begin
ioNamePtr := @name;
ioVRefNum := vrn;
ioDirID := dirID;
ioFVersNum := 0;
ioFDirIndex := 0;
oe := PBHGetFInfo(@pb, false);
if oe = noErr then
GetFileLength := pb.ioFlLgLen
else
GetFileLength := 0;
end;
end;
procedure AddFile (vrn: integer; dirID: longInt; name: str63; folder: boolean; size: longInt);
var
flh, flh2: fileListHandle;
sh: stringHandle;
lp: listItem;
rel: integer;
begin
if size < 0 then
size := GetFileLength(vrn, dirID, name);
flh := fileListHandle(NewHandle(SizeOf(fileList)));
sh := NewString(name);
with flh^^ do begin
Fvrn := vrn;
FdirID := dirID;
Fsh := sh;
Ffolder := folder;
Fdel := false;
Fsize := size;
end;
size_in_lists := size_in_lists + size;
if IsEmpty(inlist) then
AddTail(inlist, flh)
else begin
ReturnTail(inlist, lp);
repeat
MoveToPrev(lp);
Fetch(lp, flh2);
rel := RelString(flh2^^.Fsh^^, name, false, false);
until IsHead(lp) or (rel < 0); {Fsh<name}
if rel < 0 then
AddAfter(lp, flh)
else
AddBefore(lp, flh);
end;
end;
procedure GetNextFile (var vrn: integer; var dirID: longInt; var name: str63; var folder: boolean);
begin
Fetch(outptr, outflh);
with outflh^^ do begin
vrn := Fvrn;
dirID := FdirID;
name := Fsh^^;
processing_name := name;
folder := Ffolder;
end;
end;
procedure FinishFile (del: boolean);
var
flh: fileListHandle;
begin
outflh^^.Fdel := del;
MoveToNext(outptr);
processing_name := '';
end;
function AnyFilesLeft: boolean;
begin
AnyFilesLeft := not IsTail(outptr);
end;
function AnyInputFiles: boolean;
begin
AnyInputFiles := not IsEmpty(inlist);
end;
end.